/*************************************************************************
	> File Name: 002.HZOJ282.cpp
	> Author: Maureen 
	> Mail: Maureen@qq.com 
	> Created Time: 三  2/24 16:20:39 2021
 ************************************************************************/

/**
 *
题目描述
在给定的 𝑁 个正整数 𝐴1，𝐴2……𝐴𝑁 中选出两个进行异或运算，得到的结果最大是多少？

输入
第一行一个整数 𝑁，第二行 𝑁 个正整数 𝐴1−𝐴𝑁。

输出
输出一个整数表示答案。
 *
 */

#include <iostream>
using namespace std;
#define MAX_N 100000
#define BASE 31
struct Node {
    //假设每个二进制串都是31位，定长，所以不用flag
    Node *next[2];  //二进制，每个节点两个指针
} tree[MAX_N * BASE + 5];

int cnt = 0; //使用的节点数量
int val[MAX_N + 5];

Node *getNewNode() {
    return &tree[cnt++];
}

void insert(Node *root, int x) {
    for (int i = 30; i >= 0; i--) { //从二进制串的高位开始遍历
        int ind = !!(x & (1 << i)); //归一化成0或1
        if (root->next[ind] == NULL) root->next[ind] = getNewNode();
        root = root->next[ind];
    }
    return ;
}

int query(Node *root, int x) {
    int ans = 0;
    for (int i = 30; i >= 0; i--) {
        int ind = !(x & (1 << i));
        if (root->next[ind]) {
            ans |= (1 << i);
            root = root->next[ind];
        } else {
            root = root->next[!ind];
        }
    }
    return ans;
}

int main() {
    int n;
    cin >> n;
    Node *root = getNewNode();
    int num, ans = 0;
    cin >> num;
    n--;
    insert(root, num);
    while (n--) {
        cin >> num;
        ans = max(ans, query(root, num));
        insert(root, num);
    } 
    cout << ans << endl;
    return 0;
}


